package com.life.muyu.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.life.muyu.exception.CustomizeErrorCode;
import com.life.muyu.exception.CustomizeExcetpion;
import com.life.muyu.mapper.NewsMapper;
import com.life.muyu.model.News;
import com.life.muyu.service.NewsService;
import com.life.muyu.utils.ImageUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * @Author zyb
 * @Date 2020-04-11 2:51 PM
 **/
@Service
public class NewsServiceImpl extends ServiceImpl<NewsMapper,News> implements NewsService {
    @Autowired
    private NewsMapper newsMapper;

    /**
     * 获取到图片实际存放的路径
     */
    @Value("${visual.home.img}")
    private String imgHome;


    /**
     * 根据条件查询新闻信息
     * @param pageNo
     * @return
     */
    public List<News> getNewsWithCondi(Integer pageNo){
        return newsMapper.selectNewsWithLimitSize((pageNo-1)*5,5);
    }

    @Transactional
    public void addNews(MultipartFile newsCover, News toCompNews) throws CustomizeExcetpion {
        if (ImageUtils.hasNotImg(newsCover)){
            throw new CustomizeExcetpion(CustomizeErrorCode.UP_LOAD_FILE_NOT_IMG);
        }

        toCompNews.setCover(newsCover.getOriginalFilename());
        newsMapper.insertNews(toCompNews);
//        newsMapper.insertNews(toCompNews);

//        如果上传的正确的图片，需要去处理图片，将图片上传到指定位置
//        上传文件到指定目录，如果插入数据库异常，会回滚，文件也不会被上传
        try {
            newsCover.transferTo(new File(imgHome + newsCover.getOriginalFilename()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Transactional
    public void deleteNews(int[] ids) {
        newsMapper.deleteNewsByIds(ids);
    }

    /**
     * 根据id查询指定的新闻信息
     * @param id
     * @return
     */
    public News getNewsById(Integer id) {
        return newsMapper.selectNewsById(id);
    }

    /**
     * 处理更新新闻信息
     * @param newsCover
     * @param news
     */
    @Transactional
    public void updateNews(MultipartFile newsCover, News news) throws CustomizeExcetpion {
//        判断是否上传了文件
        if (!"".equals(newsCover.getOriginalFilename())){
//            如果上传了文件，并且是非图片，则抛出异常
            if (ImageUtils.hasNotImg(newsCover)){
                throw new CustomizeExcetpion(CustomizeErrorCode.UP_LOAD_FILE_NOT_IMG);
            }
//            如果上传的是新的图片，去修改数据库
            news.setCover(newsCover.getOriginalFilename());
            newsMapper.update(news,null);
//            newsMapper.updateNews(news);
//            如果更新完成之后，且没有抛出异常，则去将新的图片上传
            try {
                newsCover.transferTo(new File(imgHome + newsCover.getOriginalFilename()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else {
//            如果没有上传文件，则去update数据库除了cover的部门
            newsMapper.updateNewsWithoutCover(news);
        }
    }
}

